// 属于用户信息的切片 reducer  初始状态 action 异步操作

import { createSlice } from "@reduxjs/toolkit"

import { setToken, getToken, clearToken } from "@/utils/auth"
import axios from "axios"
// 方法来创建切片

export const userInfoSlice = createSlice({
  name: "userinfo", // 切片名称
  // 初始状态
  initialState: {
    //
    token: getToken(), // 默认值token为空
  },
  reducers: {
    //   函数集- 对当前的状态进行修改-不需要再次返回新对象了 immer
    updateToken(state, action) {
      state.token = action.payload // RTK最大的特征就是可以直接修改数据
      setToken(action.payload) // 将token同步到本地缓存
    },
    removeToken(state) {
      state.token = null // 直接删除token
      clearToken() // 清除本地缓存
    },
  },
})

export const { updateToken, removeToken } = userInfoSlice.actions // RTK自动生成的actionCreator

// 异步的action- RTK是集成thunk的

export const loginAysnc = (data) => {
  return async (dispatch) => {
    // 异步操作
    const {
      data: {
        data: { token },
      },
    } = await axios.post(
      "https://toutiao.itheima.net/v1_0/authorizations",
      data
    )
    dispatch(updateToken(token)) // 将redux中的token更新
  }
}
